<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        li {
            list-style: none;
        }

        a {
            color: inherit;
            text-decoration: none;
        }

        .wrap {
            width: 600px;
            margin: 100px auto;
        }

        .wrap .navBar {
            display: flex;
        }

        .wrap .navBar li {
            flex: 1;
            text-align: center;
            line-height: 45px;
            border: 1px solid #333;
        }

        .wrap .navBar li+li {
            border-left: 0;
        }
    </style>
</head>

<body>
    <div class="wrap">
        <ul class="navBar">
            <li>tab_01</li>
            <li>tab_02</li>
            <li>tab_03</li>
            <li>tab_04</li>
            <li>tab_05</li>
            <li>tab_06</li>
        </ul>
    </div>

</body>
<script>
    var navBar = document.getElementsByClassName("navBar")[0];
    var liList = navBar.getElementsByTagName("li");
    //第一种方式
    // li  -> this 指向绑定事件的元素  属于谁就指向谁
    // i   -> 页面加载时  循环给每一个元素定义一个 自定义属性data-index 对应下标  => 点击获取该元素的data-index =>对应下标
    // for (var i = 0; i < liList.length; i++) {
    //     var li = liList[i];
    //     li.setAttribute("data-index", i);
    //     li.onclick = function () {
    //         var index = this.getAttribute("data-index")
    //         console.log(this, index);
    //     }
    // }

    // 第二种放式
    // 分析: 问题产生的主要原因在于 事件中的li和i找的是全局变量 =>  有没有什么方法让li和i找循环当前的li和i
    // 嵌套一个中间函数 fn => 多了一层函数作用域
    // for (var i = 0; i < liList.length; i++) { // i<6
    //     fn(i);
    //     function fn(i) {  //形式参数
    //         var li = liList[i];
    //         li.onclick = function () {
    //             console.log(li, i); // li i
    //         }
    //     }
    // }

    // 第三种方式
    // 分析: 问题产生的主要原因在于 事件中的li和i找的是全局变量 =>  有没有什么方法让li和i找循环当前的li和i  
    // let在块级作用声明的变量 也是局部的
    for (let i = 0; i < liList.length; i++) { // i<6
        let li = liList[i];
        console.log(li,i);
        li.onclick = function () {
            console.log(li, i);
        }
    }
</script>

</html>